package common

/************************  请求数据  **************************/
// websocket通用请求数据格式
type WsRequest struct {
	//Id   string      `json:"seq"`            // 消息的唯一Id
	Cmd  string      `json:"cmd"`            // 请求命令字, 应为login, heartbeat, ping, chat
	Data interface{} `json:"data,omitempty"` // 数据 json, 应该为Login / HeartBeat / Message类型即可
}

// 登录请求数据
type Login struct {
	AppId    int64  `json:"appId,omitempty"`
	UserId   int64  `json:"userId,omitempty"`
	Password string `json:"password,omitempty"`
}

// ws建立连接请求数据
type WsLogin struct {
	Token  string `json:"token"` // 验证用户是否登录
	AppId  int64  `json:"appId,omitempty"`
	UserId int64  `json:"userId,omitempty"`
}

// 心跳请求数据
type WsHeartBeat struct {
	UserId string `json:"userId,omitempty"`
}

// 单聊消息请求数据
type WsSingleChatRequest struct {
	Id          int64  `json:"id"`
	AppId       int64  `json:"app_id"`
	Type        string `json:"type"`
	Content     string `json:"content"`
	SenderId    int64  `json:"sender_id"`
	RecieverId  int64  `json:"reciever_id"`
	SentTime    int64  `json:"sent_time"`
	HasRead     int64  `json:"has_read"`
	HasReadTime int64  `json:"has_read_time"`
}

// 单聊消息ack数据，可用作判断单条单聊消息是否已接收，是否已读
type WsSingleChatAck struct {
	MsgId        int64 `json:"msg_id"`
	SenderId     int64 `json:"sender_id"`
	RecieverId   int64 `json:"reciever_id"`
	Recieved     bool  `json:"recieved"`
	RecievedTime bool  `json:"recieved_time"`
	HasRead      bool  `json:"has_read"`
	HasReadTime  int64 `json:"has_read_time"`
}

// 单聊离线消息ack数据, 简单获取全部离线消息后返回的ack，主要用于服务端删除冗余的离线消息
type WsAllOfflineSingleChatAck struct {
	RecieverId   int64 `json:"reciever_id"`
	Recieved     bool  `json:"recieved"`
	RecievedTime bool  `json:"recieved_time"`
}

// 群聊消息请求数据
type WsGroupChatRequest struct {
	Id            int64           `json:"id"`
	AppId         int64           `json:"app_id"`
	GroupId       int64           `json:"group_id"`
	Type          string          `json:"type"`
	Content       string          `json:"content"`
	SenderId      int64           `json:"sender_id"`
	RecieverId    int64           `json:"reciever_id"`
	SentTime      int64           `json:"sent_time"`
	HasReadResult map[int64]int64 `json:"has_read_result"`
}
